package com.leaf.spring.y202002.day25.currentLimit;

import java.util.LinkedList;

/**
 * 计数器实现限流
 * 
 * @Title:
 * @Description: 某服务器每秒钟最多处理100个请求
 * @Author: leaf
 * @Since:2020年2月25日
 * @Version:1.1.0
 */
public class Counter {

	// 服务器访问次数
	Long counter = 0L;

	// 使用LinkedList来记录滑动窗口的10个格子
	LinkedList<Long> ll = new LinkedList<>();

	public static void main(String[] args) {

		Counter counter = new Counter();

		counter.doCheck();

	}

	private void doCheck() {

		while (true) {

			ll.add(System.currentTimeMillis());

			if (ll.size() > 10) {
				ll.removeFirst();
			}

			if (ll.peekLast() - ll.peekFirst() > 100) {
				// 限流操作
				System.out.println("限流操作");
				break;
			}

			System.out.println("处理业务逻辑");

			try {
				Thread.sleep(9); // 业务处理耗时
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

		}

	}

}
